﻿using GalaSoft.MvvmLight.Command;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Rendering;
using JiveMessenger.CustomControls;
using JiveMessenger.CustomEventArgs;
using JiveMessenger.Models;
using JiveMessenger.Network;
using JmShared;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Media;
using System.Windows.Threading;

namespace JiveMessenger.ViewModels
{
    public enum ContactListState
    {
        Wide,
        Short,
        Hidden
    }
    public interface IChat:ITab
    {
        bool IsFocused { get; set; }
        double ScrollOffset { get; set; }
        int RemainingMessages { get; set; }
        bool IsScrolledToEnd { get; set; }
        bool IsNudgeButtonVisible { get; set; }
        bool IsInputTextEnabled { get; set; }
        string ChatControlStatusText { get; set; }
        bool IsInputTextFocused { get; set; }
        bool ShowAsTab { get; set; }
        Dictionary<int, IContact> ClientLines { get; set; }
        IContact LastUserWritten { get; set; }
        DateTime LastMessageReceivedTime { get; set; }
        ChatLog ChatLog { get; set; }
        TextDocument Document { get; set; }
        TextDocument InputDocument { get; set; }
        Dictionary<string, DateTime> LastReceivedMessageTyping { get; set; }
        //ObservableCollection<JiveDefaultEmoticonModel> DefaultEmoticons { get; set; }
        ObservableCollection<VisualLineElementGenerator> MessageInputElementGenerators { get; set; }
        ObservableCollection<VisualLineElementGenerator> ConversationElementGenerators { get; set; }
        ObservableCollection<IVisualLineTransformer> ConversationLineTransformers { get; set; }

        void WriteLog();
        
       // void DisplayMessage(IContact sender, string message, DisplayMessageOptions options, DateTime timestamp);
        void DisplayMessage(DisplayMessage displayMessage);
        void UpdateMessageQueueStatus(int receivedMessages, int totalMessagesInQueue);
        void SetStatus(bool offline);
        void Cleanup();
    }
}
